package com.yww.datastructure.heap;

/**
 * @author yww
 * @description 堆
 * @since 2024/2/7 15:17
 */
public interface IHeap extends Iterable<Integer> {
    /**
     * 获取堆顶元素
     *
     * @return 堆顶元素
     */
    int peek();

    /**
     * 删除堆顶元素
     *
     * @return 堆顶元素
     */
    int poll();

    /**
     * 删除指定索引处元素
     *
     * @param index 索引
     * @return 被删除元素
     */
    int poll(int index);

    /**
     * 替换堆顶元素
     *
     * @param replaced 新元素
     */
    void replace(int replaced);

    /**
     * 堆的尾部添加元素
     *
     * @param offered 新元素
     * @return 是否添加成功
     */
    boolean offer(int offered);

    /**
     * 堆排序
     *
     * @return 排序结果
     */
    int[] sort();

    boolean isEmpty();

    boolean isFull();

    default String asString() {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("[");
        for (int e : this) {
            stringBuilder.append(e);
            stringBuilder.append(", ");
        }

        if (!isEmpty()) {
            stringBuilder.deleteCharAt(stringBuilder.lastIndexOf(" "));
            stringBuilder.deleteCharAt(stringBuilder.lastIndexOf(","));
        }
        stringBuilder.append("]");
        return stringBuilder.toString();
    }
}
